#pragma once

#include <zenox/unicode.hpp>
#include <zenox/pragma.hpp>
#include <filesystem>

namespace zenox {

std::string const &zeno_build_date();
std::string const &zeno_home();
std::string const &zeno_executable_dir();
std::string_view zeno_source_dir_prefix_remove(std::string_view filename);
std::string touch_directory_if_not_exist(std::string_view path);
std::string zeno_home_relative(std::string_view relative);
std::string zeno_executable_dir_relative(std::string_view relative);

template <std::convertible_to<std::string_view> ...Ts> requires (sizeof...(Ts) > 1)
std::string zeno_home_relative(Ts &&...relatives) {
    return zeno_home_relative(zenox::pathu8((zenox::u8path(std::string_view(relatives)) / ...)));
}

}
